class Solution {
 public:
  int ans = 0;
  int diameterOfBinaryTree(TreeNode* root) {
    GetMaxDepth(root);
    return ans;
  }
  int GetMaxDepth(TreeNode* root) {
    if (!root) return 0;
    int left = GetMaxDepth(root->left);
    int right = GetMaxDepth(root->right);
    ans = max(
        ans,
        left +
            right);  // 将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者
    return 1 + max(left, right);  // 返回节点深度
  }
};
// 一颗树的最大直径 = 左子树做大深度 + 右子树最大深度